package com.shangan.shortlink.admin.common.convention.exception;

import com.shangan.shortlink.admin.common.convention.errcode.IErrorCode;
import org.springframework.util.StringUtils;

import java.util.Optional;

/**
 * @author: Jerryzaj
 * @description TODO
 * @date: 2024/4/27 19:04
 */

/**
 * 抽象项目中三类异常体系，客户端异常、服务端异常以及远程服务调用异常
 *
 * @see ClientException
 * @see ServiceException
 * @see RemoteException
 */
public class AbstractException extends RuntimeException{
    public final String errorCode;

    public final String errorMessage;

    public AbstractException(String message, Throwable throwable, IErrorCode errorCode) {
        super(message, throwable);
        this.errorCode = errorCode.code();
        this.errorMessage = Optional.ofNullable(StringUtils.hasLength(message) ? message : null).orElse(errorCode.message());
    }

    public String getErrorCode() {
        return errorCode;
    }

    public String getErrorMessage() {
        return errorMessage;
    }
}
